[스프링부트] [JAVA] [입문] 2.2 MVC와 템플릿 엔진
업데이트:
Spring으로 웹을 개발한다는 건 크게 3가지 정도로 나눌 수 있다.
첫번째로 정적 컨텐츠
두번째로 MVC와 템플릿엔진
세번째로 API
오늘은 MVC에 대해 간단하게 알아보고 공부해보도록 하겠다!
Model 이란?
- Model은 HashMap 형태를 갖고 있으며 <key,value> 값을 가지고 있습니다.
addAttribute()
와 같은 기능을 통해 모델에 원하는 key,value 값을 주어 View에 데이터를 전달할 수 있습니다.- Controller의 메서드에 Model이라는 타입을 파라미터로 지정할 수 있습니다.
View란?
- View는 그냥 사용자가 보는 화면이라고 생각하면 편하다
- Model에 필요한 데이터를 담아서 Controller에 전달하면 Spring에서는 viewResolver를 통해 템플릿 엔진 처리를 한 뒤 html로 변환하여 웹 브라우저에 보여준다.
Controller란?
- 컨트롤러는 사용자의 요청이 진입하는 지점이라고 볼 수 있다.
- 요청에 따라 어떤 처리를 할지 결정해주는데, 컨트롤러는 결정만 해주고 실직적인 처리는 서비스(Layered Architecture)에서 담당한다.
- 사용자에게 View를 응답으로 보내준다!
MVC를 이용한 실제 동작과정
[ HelloController
]
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model){
model.addAttribute("name",name); // "name"은 key, name은 파라미터의 String name
return "hello-template";
}
- 컨트롤러에서 @GetMapping을 통해 url설정을 해주고, 메소드에 @RequestParam(“name”) 을 통해 name이라는 파라미터를 받도록 설정하고 String name과 Model 변수를 선언했습니다.
- 그리고 model의 key값을 name으로 받고, String name을 넣어줬습니다.
- return은 hello-template.html로 설정했습니다.
[ hello-template.html
]
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body></html>
- hello-template에서는 기본적으로 서버에서 어떤 작동없이, 즉 RequestParam(“name”)을 넘겨받지 못한다면
hello! empty
를 출력합니다. - name에 값이 들어온다면
hello [name]
이 출력됩니다.
[ name에 값을 받지 않은 경우
]
그런데 helloMVC 메소드는 RequestParam(“name”)을 파라미터로 갖고 있기 때문에 name을 받지 못한 경우 오류가 발생합니다.
- 분명
localhost:8080/hello-mvc
를 제대로 입력했는데 오류가 납니다. - 해결방법은 생각보다 간단합니다.
@RequestParam
[ name = Spring HAHA 로 설정 ]
localhost:8080/hello-string
뒤에?name=[name의 value]
을 입력해주면 끝입니다!- 위 그림에서는
?name=Spring HAHA
를 입력했기 때문에 helloSpring HAHA 라는 문자가 출력되었습니다.
[ name = spring!!!!! 로 설정 ]
- 이 그림에서는
?name=spring!!!!!
을 입력했기 때문에 hello spring!!!!! 라는 문자가 출력되었습니다. - 위 두 그림 모두에서 name에 값을 넣어줬더니 화면에 name이 그대로 출력된것을 볼 수 있습니다.
<p th:text="'hello ' + ${name}">hello! empty</p>
hello-template.html
에서 넣어준 위 코드 때문에 화면에는 hello + [name] 이 출력된다고 볼 수 있습니다.
MVC 동작 환경
- 웹브라우저에서
localhost:8080/hello-mvc
를 넘겨준다. - 내장 톰켓 서버에서 넘겨받은 주소를 스프링에 던져준다.
hello-mvc
가 매핑되어 있는 helloController에서 이를 받고hello-template.html
을 return해준다.- 이때 @RequestParam 으로 받은 name을 모델에 같이 전달해준다. ( 여기서는 name = spring 으로 설정 )
- 이를 받은 viewResolver가 view를 찾아주고 템플릿엔진을 연결해준다.
- 이를 웹브라우저에 다시 보내서 화면에 띄워준다!
여기까지 [스프링부트] [JAVA] [입문] 3. MVC와 템플릿 엔진 포스팅을 마치겠습니다.
댓글남기기